package org.huawei260.OD260;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * @Auther: qingle
 * @Date: 2024/8/21-23:58
 * @Description:
 * @version: 1.0
 */

public class O0014_单词接龙_answer {

	private static final String longestWordChain = "";

	public static void main(String[] args) {
		try (Scanner scanner = new Scanner(System.in)) {
			int k = Integer.parseInt(scanner.nextLine());
			int N = Integer.parseInt(scanner.nextLine());
			ArrayList<String> words = new ArrayList<>();
			for (int i = 0; i < N; i++) {
				words.add(scanner.nextLine());
			}
			findLongestWordChain(k, words);
		}

	}
	private static void findLongestWordChain(int index, ArrayList<String> words) {
		StringBuilder builder = new StringBuilder();
		builder.append(words.get(index));
		words.remove(index);

      // 根据单词的长度对单词列表进行降序排序，如果长度相同，则按字典顺序升序排序
      words.sort((w1, w2) -> {
          // 获取第一个单词的长度
          int len1 = w1.length();
          // 获取第二个单词的长度
          int len2 = w2.length();
          // 如果两个单词的长度不相同
          if(len1 != len2) {
              // 按照长度降序排序
              return len2 -len1;
          } else {
              // 如果长度相同，则按照字典顺序升序排序
              return w1.compareTo(w2);
          }
      });

		int len; // 定义一个变量来记录builder的当前长度
		do {
			len = builder.length(); // 记录循环开始时builder的长度
			String last = builder.substring(builder.length() - 1); // 获取builder最后一个字符，用于找到下一个单词

			// 遍历单词列表，寻找以builder最后一个字符开头的单词
			for (int i = 0; i < words.size(); i++) {
				String cur = words.get(i); // 获取当前单词
				if (cur.startsWith(last)) { // 如果当前单词以builder的最后一个字符开头
					builder.append(cur); // 将当前单词追加到builder
					words.remove(cur); // 从单词列表中移除已使用的单词
					break; // 跳出循环，因为已经找到了一个可以接龙的单词
				}
			}
		} while (builder.length() != len); // 如果builder的长度没有变化，说明没有找到可以接龙的单词，结束循环
		System.out.println(builder);
	}

}
